API
Quotas & Limits

Quotas & Limits

This page explains how rate limiting and quota enforcement work for the Safe Infrastructure API.

For authentication setup instructions and usage examples, see API Keys & Authentication.

Plans and limits

One API unit equals 1 HTTP request to any Safe Infrastructure endpoint.

PlanPriceMonthly quotaRequests per second
Unauthenticated–5,0002
BuilderFree50,0005
Growth€199 / month1,000,00015
ScaleFrom €499 / month3,000,00050

See Safe API plans (opens in a new tab) for the full comparison. To subscribe or upgrade, log in to the developer dashboard (opens in a new tab).

Response headers

Every authenticated response carries these headers:

HeaderMeaning
X-RateLimit-LimitMonthly quota of your plan.
X-RateLimit-RemainingRequests left in the current window.
X-RateLimit-ResetSeconds until the window resets. Not a timestamp.
X-Consumer-IdYour account identifier.
X-Consumer-RPSRequests per second allowed for your account.
X-RateLimit-PlanYour plan: builder, growth or scale.
X-RateLimit-WarningPresent from 80% of the quota used: <N>% of monthly quota used. Plans: https://safe.global/api#plans.

Unauthenticated responses carry none of the plan headers.

Example response:


_10
HTTP/1.1 200 OK
_10
X-RateLimit-Limit: 50000
_10
X-RateLimit-Remaining: 9500
_10
X-RateLimit-Reset: 1209600
_10
X-Consumer-Id: 1a2b3c4d
_10
X-Consumer-RPS: 5
_10
X-RateLimit-Plan: builder
_10
X-RateLimit-Warning: 81% of monthly quota used. Plans: https://safe.global/api#plans

Quota window

The monthly quota is a 30-day window that starts at your account's first request, not a calendar month or billing date. Changing your plan starts a new window.

Enforcement is applied at the account level, not per API key:

  • All API keys under an account share the same quota and requests-per-second allowance.
  • Creating multiple API keys does not increase your limits.
⚠️

Anti-circumvention: Creating multiple accounts to circumvent rate limits or quotas violates the Safe Infrastructure terms of service. Accounts engaging in this behavior may be suspended.

429 responses

When a limit is reached, the API returns HTTP 429 Too Many Requests. The body is always {"error_msg": "..."}. This field name is kept for existing clients.

Monthly quota reached

Returned once the account has used its monthly quota. The message names your plan, the reset date and how to upgrade.

Builder:


_10
{
_10
"error_msg": "The monthly quota of 50000 requests on the Builder plan is used. It resets on 15 Nov 2026. Upgrade to the Growth plan at https://developer.safe.global/api-subscriptions, or please book a call on <booking-link>."
_10
}

Growth:


_10
{
_10
"error_msg": "The monthly quota of 1000000 requests on the Growth plan is used. It resets on 15 Nov 2026. Upgrade to the Scale plan at https://developer.safe.global/api-subscriptions, or please book a call on <booking-link>."
_10
}

Scale:


_10
{
_10
"error_msg": "The monthly quota of 3000000 requests on the Scale plan is used. It resets on 15 Nov 2026. For a higher limit, please book a call on <booking-link>."
_10
}

Per-second limit reached

Returned when the account sends more requests per second than its plan allows. The quota is not affected.


_10
{
_10
"error_msg": "This account is limited to 5 requests per second on the Builder plan. Retry after 1 second."
_10
}

Without an API key

Returned when an unauthenticated request exceeds the unauthenticated limits.


_10
{
_10
"error_msg": "Requests without an API key have a lower limit. Create a free Builder account for 50,000 requests per month and usage reporting: https://developer.safe.global/"
_10
}

Handling 429 responses

  • Rejected requests still count against your quota. Retrying in a tight loop only burns it faster.
  • Monthly quota 429: stop sending requests until X-RateLimit-Reset seconds have passed, or upgrade your plan (opens in a new tab).
  • Per-second 429: retry after one second.
  • Before you hit 429: watch X-RateLimit-Warning. It appears from 80% of your quota, which leaves time to upgrade without an outage.

Was this page helpful?